<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <!-- 用 v-for 指令基于一个数组来渲染一个列表。 -->
        <ul>
            <li v-for="item in items" :key="item.message">
                {{ item.message }}
            </li>
            <!-- 在 v-for 块中，我们可以访问所有父作用域的 property。 -->
            <!-- v-for 还支持一个可选的第二个参数，即当前项的索引。 -->
            <li v-for="(item, index) in items">
                {{ parentMessage }} - {{ index }} - {{ item.message }}
            </li>
            <!-- 用 of 替代 in 作为分隔符，因为它更接近 JavaScript 迭代器的语法： -->
            <li v-for="(item, index) of items">
                {{ parentMessage }} - {{ index }} - {{ item.message }}
            </li>

            <!-- ------------------------- -->
            <!-- 也可以用 v-for 来遍历一个对象的 property。 -->
            <div v-for="(value, key, index) in object">
                {{ index }}---{{ key }}---{{ value }}
            </div>

            <!-- ----------------------------- -->
            <!-- 为了给 Vue 一个提示，以便它能跟踪每个节点的身份，从而重用和重新排序现有元素，
                你需要为每项提供一个唯一 key attribute： -->
            <div v-for="item in items" :key="item.id">
                <!-- 内容 -->
            </div>
            <!-- 不要使用对象或数组之类的非基本类型值作为 v-for 的 key。请用字符串或数值类型的值。 -->

            <!-- 数组更新检测 -->
            <!-- 变更方法 -->
            <!-- Vue 将被侦听的数组的变更方法进行了包裹，所以它们也将会触发视图更新。
                这些被包裹过的方法包括：push()、pop()、shift()、unshift()、splice()、sort()、reverse() -->
            <!-- 替换数组 -->
            <!-- 非变更方法，例如 filter()、concat() 和 slice()。它们不会变更原始数组，而总是返回一个新数组。
                当使用非变更方法时，可以用新数组替换旧数组
                （Vue 不能检测数组和对象的变化。详情请看深入响应式原理） -->
        </ul>
    </div>

    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                parentMessage: 'Parent',
                items: [
                    { message: 'Foo' },
                    { message: 'Bar' }
                ],
                object: {
                    title: 'How to do lists in Vue',
                    author: 'Jane Doe',
                    publishedAt: '2016-04-10'
                }
            },
        })

    </script>
</body>

</html>